//有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
//移动是指选择任一行或列，并转换该行或列中的每一个值：将所有 0 都更改为 1，将所有 1 都更改为 0。
//在做出任意次数的移动后，将该矩阵的每一行都按照二进制数来解释，矩阵的得分就是这些数字的总和。
//返回尽可能高的分数。

//输入：[[0,0,1,1],[1,0,1,0],[1,1,0,0]]

//输出：39
//解释：
//转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]
//0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39

//思路：先反转每一行的
//要求最大值，肯定最左边一列都为1，先反转最左边一列
//然后再遍历每一列，如果这一列上0出现的次数大于列长度的一半则记录下来，如果小于则length-出现的次数就是反转后的结果
class Solution{
	public int matrixScore(int[][] A){
		for(int[] a:A){
			if(a[0]==0){//如果这一列的第一个数为0则反转这一行
				for(int i=0;i<a.length;i++){
					a[i]=a[i]==0?1:0;//翻转这一行
				}
			}
		}
		int result=0;
		for(int i=0;i<A[0].length;i++){
			int count=0;
			for(int j=0;j<A.length;j++){//统计每一列中0的格式
				if(A[j][i]==0){
					count++;
				}
			}
			if(count<=A.length/2){
				count=A.length-count;
			}
		result+=count*(Math.pow(2,A[0].length-i-1));	
		}
		return result;
	}
}